package org.hy.persistence.group;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.hy.domain.group.GShare;
import org.hy.domain.group.GShareComment;

/**
 * 分享映射器
 * @author xwm
 *
 */
public interface GShareMapper {

	/**
	 * 添加分享
	 * @param gShare 分享对象
	 * @return
	 */
	int insertGShare(GShare gShare);
	
	/**
	 * 添加分享评论
	 * @param gShareComment 分享对象
	 * @return
	 */
	int insertGShareComment(GShareComment gShareComment);
	
	/**
	 * 对分享进行赞操作
	 * @param idGShare
	 * @param idGm
	 * @return
	 */
	int insertGShareLike(int idGShare,int idGm);
	
	/**
	 * 删除分享
	 * @param idGShare 分享id
	 * @return
	 */
	int deleteGShare(int idGShare);
	
	/**
	 * 删除分享评论
	 * @param idGShareComment 评论id
	 * @return
	 */
	int deleteGShareComment(int idGShareComment);
	
	/**
	 * 取消赞
	 * @param idGShareLike 赞id
	 * @return
	 */
	int deleteGShareLike(int idGShareLike);
	
	/**
	 * 更新分享
	 * @param gShare 分享对象
	 * @return
	 */
	int updateGShare(GShare gShare);
	
	/**
	 * 更新评论
	 * @param gShareComment 评论对象
	 * @return
	 */
	int updateGShareComment(GShareComment gShareComment);
	
	/**
	 * 根据id查找分享
	 * @param idGshare 分享id
	 * @return 分享对象
	 */
	GShare findGShareById(int idGshare);
	
	/**
	 * 根据id查找评论
	 * @param idGshareComment 评论id
	 * @return 评论(分享)对象
	 */
	GShareComment findGShareCommentById(int idGshareComment);
	
	/**
	 *  查找组员发布的分享
	 * @param idGm 组员编号
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare> findGShareByIdGm(@Param("idGm")int idGm, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 * 查找小组的分享
	 * @param gid 小组id
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare> findGShareByGid(@Param("gid")int gid, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 *  查找用户发布的分享列表
	 * @param uid 用户id
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare> findGShareByUid(@Param("uid")int uid, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 * 根据id查找分享,及其评论
	 * @param id 分享id
	 * @param offset
	 * @param size
	 * @return 有评论的分享
	 */
	GShare findGShareWithCommentById(@Param("id")int id, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 * 根据用户id查找分享,及其评论
	 * @param uid 用户id
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare>findGShareWithCommentByUid(@Param("uid")int uid, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 *   查找组员的分享,及其评论
	 * @param idGm 组员id
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare> findGShareWithCommentByIdGm(@Param("idGm")int idGm, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 *  查找小组的分享,及其评论
	 * @param gid 小组id
	 * @param offset
	 * @param size
	 * @return  分享列表
	 */
	List<GShare>findGShareWithCommentByGid(@Param("gid")int gid, @Param("offset")int offset, @Param("size")int size);
	
	/**
	 * 统计小组分享数
	 * @param gid 小组id
	 * @return
	 */
	int countGShare(int gid);
	
	/**
	 * 统计分享评论数
	 * @param gShareIds 分享id数组
	 * @return 相应的计数列表
	 */
	List<Integer> countGShareComment(int[] gShareIds);
	
	/**
	 * 组员是否对分享赞过
	 * @param gShareIds 分享id数组
	 * @param idGm 小组成员
	 * @return boolean列表.赞过的分享返回true,否则false
	 */
	List<Boolean> isLike(int[]gShareIds,int idGm);
	
	/**
	 * 统计小组黄金分享数
	 * @param gid
	 * @return
	 */
	int countGoldenGShare(int gid);
	
	/**
	 * 查找小组的黄金分享
	 * @param gid 小组id
	 * @param offset
	 * @param size
	 * @return 分享列表
	 */
	List<GShare> findGoldenGShare(@Param("gid")int gid, @Param("offset")int offset, @Param("size")int size);
	
}
